↳ Prolog
↳ PrologToPiTRSProof
log2_in(X, Y) → U1(X, Y, log2_in(X, 0, Y))
log2_in(s(s(X)), I, Y) → U2(X, I, Y, half_in(s(s(X)), X1))
half_in(s(s(X)), s(Y)) → U4(X, Y, half_in(X, Y))
half_in(s(0), 0) → half_out(s(0), 0)
half_in(0, 0) → half_out(0, 0)
U4(X, Y, half_out(X, Y)) → half_out(s(s(X)), s(Y))
U2(X, I, Y, half_out(s(s(X)), X1)) → U3(X, I, Y, log2_in(X1, s(I), Y))
log2_in(s(0), I, I) → log2_out(s(0), I, I)
log2_in(0, I, I) → log2_out(0, I, I)
U3(X, I, Y, log2_out(X1, s(I), Y)) → log2_out(s(s(X)), I, Y)
U1(X, Y, log2_out(X, 0, Y)) → log2_out(X, Y)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
log2_in(X, Y) → U1(X, Y, log2_in(X, 0, Y))
log2_in(s(s(X)), I, Y) → U2(X, I, Y, half_in(s(s(X)), X1))
half_in(s(s(X)), s(Y)) → U4(X, Y, half_in(X, Y))
half_in(s(0), 0) → half_out(s(0), 0)
half_in(0, 0) → half_out(0, 0)
U4(X, Y, half_out(X, Y)) → half_out(s(s(X)), s(Y))
U2(X, I, Y, half_out(s(s(X)), X1)) → U3(X, I, Y, log2_in(X1, s(I), Y))
log2_in(s(0), I, I) → log2_out(s(0), I, I)
log2_in(0, I, I) → log2_out(0, I, I)
U3(X, I, Y, log2_out(X1, s(I), Y)) → log2_out(s(s(X)), I, Y)
U1(X, Y, log2_out(X, 0, Y)) → log2_out(X, Y)
LOG2_IN(X, Y) → U11(X, Y, log2_in(X, 0, Y))
LOG2_IN(X, Y) → LOG2_IN(X, 0, Y)
LOG2_IN(s(s(X)), I, Y) → U21(X, I, Y, half_in(s(s(X)), X1))
LOG2_IN(s(s(X)), I, Y) → HALF_IN(s(s(X)), X1)
HALF_IN(s(s(X)), s(Y)) → U41(X, Y, half_in(X, Y))
HALF_IN(s(s(X)), s(Y)) → HALF_IN(X, Y)
U21(X, I, Y, half_out(s(s(X)), X1)) → U31(X, I, Y, log2_in(X1, s(I), Y))
U21(X, I, Y, half_out(s(s(X)), X1)) → LOG2_IN(X1, s(I), Y)
log2_in(X, Y) → U1(X, Y, log2_in(X, 0, Y))
log2_in(s(s(X)), I, Y) → U2(X, I, Y, half_in(s(s(X)), X1))
half_in(s(s(X)), s(Y)) → U4(X, Y, half_in(X, Y))
half_in(s(0), 0) → half_out(s(0), 0)
half_in(0, 0) → half_out(0, 0)
U4(X, Y, half_out(X, Y)) → half_out(s(s(X)), s(Y))
U2(X, I, Y, half_out(s(s(X)), X1)) → U3(X, I, Y, log2_in(X1, s(I), Y))
log2_in(s(0), I, I) → log2_out(s(0), I, I)
log2_in(0, I, I) → log2_out(0, I, I)
U3(X, I, Y, log2_out(X1, s(I), Y)) → log2_out(s(s(X)), I, Y)
U1(X, Y, log2_out(X, 0, Y)) → log2_out(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
LOG2_IN(X, Y) → U11(X, Y, log2_in(X, 0, Y))
LOG2_IN(X, Y) → LOG2_IN(X, 0, Y)
LOG2_IN(s(s(X)), I, Y) → U21(X, I, Y, half_in(s(s(X)), X1))
LOG2_IN(s(s(X)), I, Y) → HALF_IN(s(s(X)), X1)
HALF_IN(s(s(X)), s(Y)) → U41(X, Y, half_in(X, Y))
HALF_IN(s(s(X)), s(Y)) → HALF_IN(X, Y)
U21(X, I, Y, half_out(s(s(X)), X1)) → U31(X, I, Y, log2_in(X1, s(I), Y))
U21(X, I, Y, half_out(s(s(X)), X1)) → LOG2_IN(X1, s(I), Y)
log2_in(X, Y) → U1(X, Y, log2_in(X, 0, Y))
log2_in(s(s(X)), I, Y) → U2(X, I, Y, half_in(s(s(X)), X1))
half_in(s(s(X)), s(Y)) → U4(X, Y, half_in(X, Y))
half_in(s(0), 0) → half_out(s(0), 0)
half_in(0, 0) → half_out(0, 0)
U4(X, Y, half_out(X, Y)) → half_out(s(s(X)), s(Y))
U2(X, I, Y, half_out(s(s(X)), X1)) → U3(X, I, Y, log2_in(X1, s(I), Y))
log2_in(s(0), I, I) → log2_out(s(0), I, I)
log2_in(0, I, I) → log2_out(0, I, I)
U3(X, I, Y, log2_out(X1, s(I), Y)) → log2_out(s(s(X)), I, Y)
U1(X, Y, log2_out(X, 0, Y)) → log2_out(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
HALF_IN(s(s(X)), s(Y)) → HALF_IN(X, Y)
log2_in(X, Y) → U1(X, Y, log2_in(X, 0, Y))
log2_in(s(s(X)), I, Y) → U2(X, I, Y, half_in(s(s(X)), X1))
half_in(s(s(X)), s(Y)) → U4(X, Y, half_in(X, Y))
half_in(s(0), 0) → half_out(s(0), 0)
half_in(0, 0) → half_out(0, 0)
U4(X, Y, half_out(X, Y)) → half_out(s(s(X)), s(Y))
U2(X, I, Y, half_out(s(s(X)), X1)) → U3(X, I, Y, log2_in(X1, s(I), Y))
log2_in(s(0), I, I) → log2_out(s(0), I, I)
log2_in(0, I, I) → log2_out(0, I, I)
U3(X, I, Y, log2_out(X1, s(I), Y)) → log2_out(s(s(X)), I, Y)
U1(X, Y, log2_out(X, 0, Y)) → log2_out(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
HALF_IN(s(s(X)), s(Y)) → HALF_IN(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
HALF_IN(s(s(X))) → HALF_IN(X)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
LOG2_IN(s(s(X)), I, Y) → U21(X, I, Y, half_in(s(s(X)), X1))
U21(X, I, Y, half_out(s(s(X)), X1)) → LOG2_IN(X1, s(I), Y)
log2_in(X, Y) → U1(X, Y, log2_in(X, 0, Y))
log2_in(s(s(X)), I, Y) → U2(X, I, Y, half_in(s(s(X)), X1))
half_in(s(s(X)), s(Y)) → U4(X, Y, half_in(X, Y))
half_in(s(0), 0) → half_out(s(0), 0)
half_in(0, 0) → half_out(0, 0)
U4(X, Y, half_out(X, Y)) → half_out(s(s(X)), s(Y))
U2(X, I, Y, half_out(s(s(X)), X1)) → U3(X, I, Y, log2_in(X1, s(I), Y))
log2_in(s(0), I, I) → log2_out(s(0), I, I)
log2_in(0, I, I) → log2_out(0, I, I)
U3(X, I, Y, log2_out(X1, s(I), Y)) → log2_out(s(s(X)), I, Y)
U1(X, Y, log2_out(X, 0, Y)) → log2_out(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
LOG2_IN(s(s(X)), I, Y) → U21(X, I, Y, half_in(s(s(X)), X1))
U21(X, I, Y, half_out(s(s(X)), X1)) → LOG2_IN(X1, s(I), Y)
half_in(s(s(X)), s(Y)) → U4(X, Y, half_in(X, Y))
U4(X, Y, half_out(X, Y)) → half_out(s(s(X)), s(Y))
half_in(s(0), 0) → half_out(s(0), 0)
half_in(0, 0) → half_out(0, 0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
U21(I, half_out(X1)) → LOG2_IN(X1, s(I))
LOG2_IN(s(s(X)), I) → U21(I, half_in(s(s(X))))
half_in(s(s(X))) → U4(half_in(X))
U4(half_out(Y)) → half_out(s(Y))
half_in(s(0)) → half_out(0)
half_in(0) → half_out(0)
half_in(x0)
U4(x0)
U21(I, half_out(X1)) → LOG2_IN(X1, s(I))
half_in(s(0)) → half_out(0)
POL(0) = 0
POL(LOG2_IN(x1, x2)) = 2·x1 + x2
POL(U21(x1, x2)) = 2 + x1 + x2
POL(U4(x1)) = 2 + x1
POL(half_in(x1)) = x1
POL(half_out(x1)) = 2·x1
POL(s(x1)) = 1 + x1
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ DependencyGraphProof
LOG2_IN(s(s(X)), I) → U21(I, half_in(s(s(X))))
half_in(s(s(X))) → U4(half_in(X))
U4(half_out(Y)) → half_out(s(Y))
half_in(0) → half_out(0)
half_in(x0)
U4(x0)